{%- set uses_socketio = cookiecutter.use_socketio in ('yes', 'y') -%}

# 导入应用工厂函数和项目名称
from main import app_factory  # 从main模块导入应用工厂函数
from config import project_name  # 从配置模块导入项目名称
import os  # 导入操作系统接口模块

# 获取默认配置类
try:
    # 从环境变量获取默认配置类路径
    config_obj_path = os.environ['FLASK_CONFIG_DEFAULT']
except KeyError:
    # 如果环境变量未设置，提示用户并退出
    print(
        "请设置环境变量 FLASK_CONFIG_DEFAULT。"
        "它告诉应用程序要加载哪个配置类。")
    exit()

# 使用应用工厂创建Flask应用实例
app = app_factory(config_obj_path, project_name)

# 当直接运行此脚本时启动应用
if __name__ == '__main__':
    # 获取调试模式设置，默认为False
    _debug = app.config.get('DEBUG', False)

    # 准备运行参数
    kwargs = {
        'host': os.getenv('FLASK_HOST', '0.0.0.0'),  # 从环境变量获取主机，默认为0.0.0.0
        'port': int(os.getenv('FLASK_PORT', 5000)),  # 从环境变量获取端口，默认为5000
        'debug': _debug,  # 设置调试模式
        'use_reloader': app.config.get('USE_RELOADER', _debug),  # 设置自动重载
        **app.config.get('SERVER_OPTIONS', {})  # 合并其他服务器选项
    }

    {% if uses_socketio -%}
    # 如果启用了SocketIO，使用SocketIO运行应用
    from extensions import io  # 从扩展模块导入SocketIO实例
    io.run(app, **kwargs)  # 使用SocketIO运行应用
    {% else %}
    # 否则使用标准Flask运行方式
    app.run(**kwargs)  # 使用Flask内置服务器运行应用
    {% endif %}